package com.vogue.modules.wechat.controller;


import com.riversoft.weixin.common.media.MediaType;
import com.riversoft.weixin.common.media.MpArticle;
import com.riversoft.weixin.common.media.MpNews;
import com.riversoft.weixin.mp.media.Materials;
import com.riversoft.weixin.mp.media.bean.Material;
import com.riversoft.weixin.mp.media.bean.MaterialPagination;
import com.riversoft.weixin.mp.media.bean.MpNewsPagination;
import com.vogue.common.utils.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * Created by John on 2017/8/2.
 */
@Controller
@RequestMapping("/wx")
public class WxMaterialController {

    private static Logger logger = LoggerFactory.getLogger(WxCallbackController.class);

    /**
     * 上传图片/录音/缩略图/视频/图文素材中的图片
     * @param file
     * @param type imge图片  voice录音 thumb缩略图
     * @return
     */
    @RequestMapping("/materials/upload")
    @ResponseBody
    public R upload(MultipartFile file, String type, String title, String description)  throws IOException {
        Material material = null;
        R r = R.error("类型错误");
        if (type.equals("imge")) {
            material = Materials.defaultMaterials().addImage(file.getInputStream(),file.getOriginalFilename());
            r = R.ok("图片上传成功").put("imge",material);
        }else if(type.equals("voice")){
            material = Materials.defaultMaterials().addVoice(file.getInputStream(),file.getOriginalFilename());
            r = R.ok("录音上传成功").put("voice",material);
        }else if(type.equals("thumb")){
            material = Materials.defaultMaterials().addThumb(file.getInputStream(),file.getOriginalFilename());
            r = R.ok("缩略图上传成功").put("thumb",material);
        }else if(type.equals("video")){
            title = "考试";
            description = "驾考视频";
            material = Materials.defaultMaterials().addVideo(file.getInputStream(),file.getOriginalFilename(),title,description);
            r = R.ok("视频上传成功").put("thumb",material);
        }else if(type.equals("MpNewsImage")){
            /** 图文消息的content里面如果有图片，该图片需要使用本方法上传，图片仅支持jpg/png格式，大小必须在1MB以下
                return 图片的url, 可以在图文消息的content里面使用*/
            String url= Materials.defaultMaterials().addMpNewsImage(file.getInputStream(),file.getName());
            r = R.ok("图片上传成功").put("url",url);
        }
        return  r;
    }

    /**
     * 上传一个图文素材
     * @param mpNews 图文素材
     * @return 返回media id
     */
    @RequestMapping("/materials/addMpNews")
    @ResponseBody
    public R addMpNews(MpNews mpNews) {
        String url= Materials.defaultMaterials().addMpNews(mpNews);
        return R.ok("图文素材上传成功").put("url",url);
    }

    /**
     *
     * 获取图文素材
     *
     * @param mediaId media id
     * @return 图文素材
     */
    @RequestMapping("/materials/getMpNews")
    @ResponseBody
    public R  getMpNews(String mediaId) {
        MpNews mpNews= Materials.defaultMaterials().getMpNews(mediaId);
        return R.ok("图文素材获取成功").put("mpNews",mpNews);
    }

    /**
     * 修改图文素材
     *
     * @param mediaId 图文素材 media id
     * @param index   要更新的文章在图文素材中的位置
     * @param article 文章
     */
    @RequestMapping("/materials/updateMpNews")
    @ResponseBody
    public R updateMpNews(String mediaId, int index, MpArticle article) {
        Materials.defaultMaterials().updateMpNews(mediaId,index,article);
        return R.ok("图文素材修改成功");
    }

    /**
     * 上传voice
     *
     * @param inputStream voice 录音
     * @param fileName    文件名
     * @return 上传结果
     */
    @RequestMapping("/materials/addVoice")
    @ResponseBody
    public R  addVoice(InputStream inputStream, String fileName) {
        Material voice = Materials.defaultMaterials().addVoice(inputStream,fileName);
        return  R.ok("录音上传成功").put("voice",voice);
    }

    /**
     * 删除永久素材
     * @param mediaId
     */
    public R delete(String mediaId) {
        Materials.defaultMaterials().delete(mediaId);
        return R.ok("删除成功");
    }

    /**
     * 参数  是否必须     介绍
     * type	    是      素材的类型，图片（image）、视频（video）、语音 （voice）、图文（news）
     * offset	是      从全部素材的该偏移位置开始返回，0表示从第一个素材 返回
     * count	是      返回素材的数量，取值在1到20之间
     *
     * @return
     */
    @RequestMapping("/materials/getList")
    @ResponseBody
    public R  addVoice(int offset,int count,String type) {
        if ("news".equals(type)){
            MpNewsPagination news = Materials.defaultMaterials().listMpNews(offset,count);
            return R.ok("图文素材获取成功").put("materials",news);
        }
        if ("image".equals(type)){
            MaterialPagination image = Materials.defaultMaterials().list(MediaType.image,offset,count);
            return R.ok("图片素材获取成功").put("materials",image);
        }
        if ("video".equals(type)){
            MaterialPagination video = Materials.defaultMaterials().list(MediaType.video,offset,count);
            return R.ok("视频素材获取成功").put("materials",video);
        }
        if ("voice".equals(type)){
            MaterialPagination voice = Materials.defaultMaterials().list(MediaType.voice,offset,count);
            return R.ok("语音素材获取成功").put("materials",voice);
        }
        if ("all".equals(type)){
            MpNewsPagination news = Materials.defaultMaterials().listMpNews(offset,count);
            MaterialPagination image = Materials.defaultMaterials().list(MediaType.image,offset,count);
            MaterialPagination video = Materials.defaultMaterials().list(MediaType.video,offset,count);
            MaterialPagination voice = Materials.defaultMaterials().list(MediaType.voice,offset,count);
            return R.ok("素材获取成功").put("news",news).put("image",image)
                    .put("video",video).put("voice",voice);
        }
        return  R.error();
    }
}
